서울시 치안데이터 분석

“CCTV가 많으면 범죄수를
낮추는 데에 도움이 될까요?”

출처: 서울시 공공데이터포털 (https://data.seoul.go.kr/)

데이터 살펴보기
TOP 3
    자치구       총생활인구수
16  송파구  753278.4966
0   강남구  633521.1274
3   강서구  533814.0426
TOP 3
    자치구   1인가구수
4   관악구  150745
3   강서구  104509
16  송파구   87140

데이터 살펴보기
자치구
강남구    7007
관악구    5366
서초구    5060
Name: count, dtype: int64
자치구
강남구    1713
용산구    1421
구로구    1372
Name: count, dtype: int64

안전벨과 CCTV의 상관관계: 0.3032
예상과 달리, CCTV와 안전벨의 상관관계가 높지 않다.

데이터 살펴보기


치안센터와 경찰관 수의 상관관계: 0.6500
다른 변수들과 비교했을 때 가장 높은 상관관계를 보임
종로구와 강남구만 조금 다르고 나머지는 비슷하다.

데이터 살펴보기
    자치구  술집 수
17  양천구  3094
7   금천구  3179
10  동작구  3276
     자치구  술집 수
12  서대문구  3578
7    금천구  3179
14   성동구  4001

술집 수와 총 범죄 건수의 상관계수: 0.8354
다른 변수들과 비교했을 때, 가장 높은 상관관계를 보임

상관계수 분석

범죄건수 주요 변수

  • 술집 수
  • 생활 인구 수
  • 구별 경찰 수
  • CCTV 총 수량
  • 1인가구수

회귀분석

상관 관계 높은 변수 임의 선택

VS Stepwise로 변수 선택

회귀분석

변수 전처리

df2 = df.copy()

scaler = StandardScaler()
x = ['총생활인구수', '총범죄건수', '구별 경찰수', 
    '안전벨 개수', 'CCTV 수량', '총 음식점 수', 
    '1인가구수', '파출소수']
X_scaled = scaler.fit_transform(df2[x])

X_scaled_df = pd.DataFrame(X_scaled, columns=x, index=df2.index)
  • 변수의 Scale 이 각각 다르기 때문에, 표준화 수행
  • 변수간 영향을 공정하게 비교하자

회귀분석(상관관계 기준)
X3 = X_scaled_df[['총 음식점 수','CCTV 수량','1인가구수','구별 경찰수','총생활인구수']]
y = X_scaled_df['총범죄건수']
X3 = sm.add_constant(X3)
model3 = sm.OLS(y, X3).fit()
print(model3.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                  총범죄건수   R-squared:                       0.903
Model:                            OLS   Adj. R-squared:                  0.876
Method:                 Least Squares   F-statistic:                     33.57
Date:                Thu, 17 Apr 2025   Prob (F-statistic):           1.61e-08
Time:                        22:40:52   Log-Likelihood:                -6.0400
No. Observations:                  24   AIC:                             24.08
Df Residuals:                      18   BIC:                             31.15
Df Model:                           5                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const        1.11e-16      0.073   1.51e-15      1.000      -0.154       0.154
총 음식점 수        0.4745      0.166      2.865      0.010       0.127       0.822
CCTV 수량        0.1789      0.097      1.840      0.082      -0.025       0.383
1인가구수          0.0846      0.098      0.866      0.398      -0.121       0.290
구별 경찰수         0.1832      0.186      0.986      0.337      -0.207       0.574
총생활인구수         0.2817      0.108      2.611      0.018       0.055       0.508
==============================================================================
Omnibus:                        0.922   Durbin-Watson:                   2.122
Prob(Omnibus):                  0.631   Jarque-Bera (JB):                0.287
Skew:                          -0.258   Prob(JB):                        0.867
Kurtosis:                       3.144   Cond. No.                         5.62
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

회귀분석(상관관계 기준)

서울시 치안 기준 군집화

상관계수가 높은 변수를 활용해서,

비슷한 치안 특성을 가진 구를 찾기위해

저희는 K-Means 클러스터링을 사용했습니다.

K-Means 클러스터링이란?

유사한 특성을 가진 데이터를 자동으로 그룹으로 묶는 비지도 학습 기법

  • 사용자가 군집 개수(K)를 정하면,

  • K개의 중심점을 기준으로 데이터를 그룹화하고,

  • 각 데이터를 가장 가까운 중심점에 할당합니다.

  • 중심점을 반복적으로 조정하며 유사한 데이터끼리 묶는 군집을 만듭니다.

서울시 자치구별 ‘구별_경찰수’, ‘유흥업소_개수’, ‘총생활인구수’, ‘cctv’ 등을 기준으로 치안 특성이 비슷한 지역을 자동으로 군집화하기 위해 사용했습니다.

하지만 분석 결과는…?